Spiral Matrix II

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:

  1. [
  2. [ 1, 2, 3 ],
  3. [ 8, 9, 4 ],
  4. [ 7, 6, 5 ]
  5. ]

Solution:

  1. public class Solution {
  2. public int[][] generateMatrix(int n) {
  3. int[][] res = new int[n][n];
  4. int layers = (int)Math.ceil(n / 2.0);
  5. int val = 1;
  6. for (int k = 0; k < layers; k++) {
  7. if (n == 1) {
  8. res[k][k] = val++;
  9. break;
  10. }
  11. // top
  12. for (int j = 0; j < n - 1; j++) {
  13. res[k][k + j] = val++;
  14. }
  15. // right
  16. for (int i = 0; i < n - 1; i++) {
  17. res[k + i][k + n - 1] = val++;
  18. }
  19. // bottom
  20. for (int j = n - 1; j > 0; j--) {
  21. res[k + n - 1][k + j] = val++;
  22. }
  23. // left
  24. for (int i = n - 1; i > 0; i--) {
  25. res[k + i][k] = val++;
  26. }
  27. n -= 2;
  28. }
  29. return res;
  30. }
  31. }